package cn.tedu.csmall.stock.webapi.quartz; 
 /*
 @Time: 2023/3/1 23:05
 @Author:GShuai
 @File:QuartzConfig.class
 @Software:IntelliJ IDEA
*/

import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

// 当前类实在配置Spring容器中的调度器Scheduler
// 所有配置Spring内容的配置类，必须添加@Configuration注解
@Configuration
public class QuartzConfig {
    // 创建一个 JobDetail（工作详情）对象，并将他保存到Spring容器中
    // 这个对象中要运行Job接口实现类的反射
    // @Bean会将其后的方法返回值保存到Spring容器中
    @Bean
    public JobDetail showTime() {
        System.out.println("showTime方法执行...");
        return JobBuilder.newJob(QuartzJob.class)
                //给这个JobDetail定个名字
                .withIdentity("datetime")
                // 即使没有触发器绑定当前JobDetail也不会将其删除
                .storeDurably()
                .build();
    }

    // 下面要声明触发器对象，它设置job何时运行，也是保存到Spring容器中
    @Bean
    public Trigger showTimeTrigger(){
        System.out.println("showTimeTrigger运行....");
        // 定义Cron表达式
        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/10 * * * * ?");
        return TriggerBuilder.newTrigger()
                // 绑定要运行的jobDetail对象
                .forJob(showTime())
                // 绑定当前触发器名称
                .withIdentity("dateTrigger")
                // 绑定Cron表达式
                .withSchedule(cronScheduleBuilder)
                .build();
    }

    @Bean
    public JobDetail addStock(){
        return JobBuilder.newJob(StockJob.class)
                .withIdentity("addStock")
                .storeDurably()
                .build();
    }

    //@Bean
    public Trigger addStockTrigger(){
        CronScheduleBuilder cron = CronScheduleBuilder.cronSchedule("0/10 * * * * ?");
        return TriggerBuilder.newTrigger()
                .forJob(addStock())
                .withIdentity("addTrigger")
                .withSchedule(cron)
                .build();
    }
}
